package com.qkjia.pojo;

import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * @Auther 赵乾坤
 * @Date 2021-06-23 22:38
 *      * 数据库ID自增
 *       AUTO(0),
 *
  *      * 该类型为未设置主键类型
  *
         * //    NONE(1),
         *     /**
  *      * 用户输入ID
  *      * 该类型可以通过自己注册自动填充插件进行填充
  *      * INPUT(2),
         *
         *      以下3种类型、只有当插入对象ID 为空，才自动填充。 */
/**
  *      * 全局唯一ID (idWorker)
  *
         ID_WORKER(3),
         *     /**
  *      * 全局唯一ID (UUID)
  *
         * //    UUID(4)
         *     /**
  *       /**
 *      * 字符串全局唯一ID (idWorker 的字符串表示)
 *
            *ID_WORKER_STR(5);String    和 ID_WORKER(3) 却别  ID_WORKER(3)是int
  *
 *
 *
 * 乐观锁：
 * 特别说明:
 *
 * 支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
 * 整数类型下 newVersion = oldVersion + 1
 * newVersion 会回写到 entity 中
 * 仅支持 updateById(id) 与 update(entity, wrapper) 方法
 * 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
 *
 * 测试逻辑删除
 * 测试后发现，数据并没有被删除，deleted字段的值由0变成了1
 * 测试后分析打印的sql语句，是一条update
 * 注意：被删除数据的deleted 字段的值必须是 0，才能被选取出来执行逻辑删除的操作
 *
 */
@Data
public class User {


    //要想影响所有实体的配置，可以设置全局主键配置  配置文件
//    @TableId(type = IdType.AUTO)//自增策略
    private Long id;


    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)//插入时自动填充
    private Date createTime;

//    @TableField(fill = FieldFill.UPDATE)//更新时自动填充
    @TableField(fill = FieldFill.INSERT_UPDATE)//更新或者插入时自动填充
//    @Column (name="USER_NAME") //解决字段不一致
    private Date updateTime;



    @ApiModelProperty("乐观锁版本-----------》元对象处理器接口添加version的insert默认值 一定要先查询，再更改乐观锁才会版本+1")
    @Version//乐观锁，注解 + 配置类才起效果
    @TableField(fill = FieldFill.INSERT)//插入时自动填充
    private Integer version;


    @ApiModelProperty("逻辑删除的注解------------》元对象处理器接口添加version的insert默认值-----》" +
            "application.properties 加入配置-------------》在 MybatisPlusConfig 中注册 Bean")
    @TableLogic//逻辑删除的注解
    @TableField(fill = FieldFill.INSERT)//插入时自动填充
    private Integer deleted;
}
